@南馆潇湘
2年前 提问
1个回答

编码阶段预防XSS漏洞的措施有哪些

安全小白成长记
2年前

编码阶段预防XSS漏洞的措施有以下这些:

  • 将Cookie设置为HttpOnl:攻击Web应用大多数是为了获得合法用户的Cookie信息,所以应该减少将大量的数据存储在Cookie中,在任何可能的时候使用HttpOnly Cookie。HttpOnly Cookie是某些浏览器所支持的一种防御机制,应用程序能使用它来防止XSS攻击。当一个Cookie以这种方式标记时,支持它的浏览器将阻止客户端JavaScript直接访问Cookie。虽然浏览器仍然会在请求的HTTP消息头中提交这个Cookie,但它不会出现在document.cookie返回的字符串中。

  • 谨慎使用DOM操:基于DOM的XSS是利用DOM操作实现的针对客户端的XSS注入,由于被处理的数据不在服务器控制范围内,因此不能通过在服务器端部署防御策略来解决,这就要求开发人员要谨慎、合理地使用DOM操作,尽可能避免使用DOM进行客户端重定向、文档操作或调用本地数据等敏感操作,转而将这些行为放到服务器端使用动态页面的方式来实现。

  • 采用白名单对输入数据进行验证:例如在服务器端,如果UserName字段仅允许字母数字字符,且不区分大小写,则使用以下正则表达式^[ a-zA-Z0-9]*$进行验证。

  • 使用黑名单对输入数据进行安全检查或过滤:例如在服务器端,针对非法的HTML代码包括单双引号等,应编写函数对其进行检查或过滤。需要检查或过滤的特殊字符至少包含以下字符’、”、<、>、空格键、TAB键、script、&、#、%、+、$、(、)、xss、expression等。

  • 采用开发框架自带的标签输出方:禁止采用<%=pValue %>不安全的输出方式,应该采用标签形式输出,例如<s:hidden name="id" value="%{secAppConf.id}" />,采用标签方式输出时,系统默认会自动对数据做HTML转换。

  • 对输出数据进行净:应对输出数据进行过滤和转义,将敏感字符转换为其对应的实体字符来清理HTML特殊字符。例如,将HTML标签最关键的字符<、>、&编码为&lt、&gt、&amp。